﻿#define _CRT_SECURE_NO_WARNINGS 1
//你可以将 current 这个时间增加 1、5、15 或 60 分钟。你可以执行这一操作 任意 次数。
//24 小时制时间 按 "HH:MM" 进行格式化，其中 HH 在 00 和 23 之间，而 MM 在 00 和 59 之间。最早的 24 小时制时间为 00:00 ，最晚的是 23:59 。
//在一步操作中，你可以将 current 这个时间增加 1、5、15 或 60 分钟。你可以执行这一操作 任意 次数。
//返回将 current 转化为 correct 需要的 最少操作数 。
//
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

//int Apex(char* p1, char* p2)
//{
//	int sum1 = 0, sum2 = 0, i = 1;
//	while (*p1 != ':' && *p1 != '\0')
//	{
//		sum1 += (*p1 - '0') * pow(10, i);
//		sum2 += (*p2 - '0') * pow(10, i);
//		i--;
//		p1++;
//		p2++;
//	}
//	return sum2 - sum1;
//}
//int convertTime(char* current, char* correct) 
//{
//	char* p1 = current + 3, * p2 = correct + 3;
//	int n1 = 0;
//	int flag = Apex(p1, p2);
//	if (flag >= 0)
//	{
//		int n2 = Apex(current, correct);
//		while (flag)
//		{
//
//			if (flag >= 15)
//			{
//				n2++;
//				flag -= 15;
//			}
//			else if (flag >= 5)
//			{
//				n2++;
//				flag -= 5;
//			}
//			else if (flag >= 1)
//			{
//				flag -= 1;
//				n2++;
//			}
//			else
//			{
//				;
//			}
//
//		}
//		return n2;
//	}
//	else
//	{
//		int n2 = Apex(current, correct);
//		flag = 60+flag;
//		while (flag)
//		{
//			if (flag >= 15)
//			{
//				n2++;
//				flag -= 15;
//			}
//			else if (flag >= 5)
//			{
//				n2++;
//				flag -= 5;
//			}
//			else if (flag >= 1)
//			{
//				flag -= 1;
//				n2++;
//			}
//			else
//			{
//				;
//			}
//		}
//		return n2 - 1;
//	}
//}
//int main()
//{
//	char* p1 = "11:00";
//	char* p2 = "11:01";
//	int nums = convertTime(p1, p2);
//	printf("%d", nums);
//	return 0;
//}
// 

//每一步 操作 中，如果 num1 >= num2 ，你必须用 num1 减 num2 ；否则，你必须用 num2 减 num1 。
//例如，num1 = 5 且 num2 = 4 ，应该用 num1 减 num2 ，因此，得到 num1 = 1 和 num2 = 4 。
// 然而，如果 num1 = 4且 num2 = 5 ，一步操作后，得到 num1 = 4 和 num2 = 1 。
//返回使 num1 = 0 或 num2 = 0 的 操作数 。
//
//int countOperations(int num1, int num2) {
//	if (num1 == num2 && num1 != 0)
//		return 1;
//	if (num1 == num2 && num1 == 0)
//		return 0;
//	if (num1 > num2)
//	{
//		int n1 = 0;
//		while (num1 != num2 && (num1 != 0 && num2 != 0))
//		{
//			n1 += num1 / num2;
//			num1 %= num2;
//			if (num1 == 0)
//			{
//				return n1;
//			}
//			n1 = n1 + num2 / num1;
//			num2 %= num1;
//		}
//			return n1;
//	}
//	else
//	{
//		int n1 = 0;
//		while (num1 != num2&&(num1!=0&&num2!=0))
//		{
//			n1 += num2 / num1;
//			num2 %= num1;
//			if (num2 == 0)
//				return n1;
//			n1 = n1 + num1 / num2;
//			num1 %= num2;
//		}
//			return n1;
//	}
//}
//int main()
//{
//	int a, b;
//	scanf("%d%d", &a, &b);
//	int num=countOperations(a, b);
//	printf("%d", num);
//	return 0;
//}
//

//
//int* printNumbers(int n, int* returnSize) 
//{
//    int num = pow(10, n) - 1;
//    int* p1 = (int*)malloc(sizeof(int) * num);
//    for (int i = 1; i <= num; i++)
//    {
//        p1[i-1] = i;
//        printf("%d ", p1[i]);
//    }
//    return p1;
//}
//int main()
//{
//    int n = 0;
//    int* p1 = NULL;
//    scanf("%d", &n);
//    printNumbers(n, p1);
//    return 0;
//}

//剑指 Offer 39. 数组中出现次数超过一半的数字
int majorityelement(int* nums, int numssize) 
{
	int flag = 1, max = nums[0];
	for (int i = 1; i < numssize; i++)
	{
		if (nums[i] == max)
		{
			flag++;
		}
		else
		{
			flag--;
		}
		if (flag == 0)
		{
			flag = 1;
			max = nums[i];
		}
	}
	return max;
}

int main()
{
	int arr[] = { 7,7,8,8,8 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int nums = majorityElement(arr, sz);
	printf("%d", nums);
	return 0;
}

//int* getLeastNumbers(int* arr, int arrSize, int k, int* returnSize) {
//	int i, j;
//	for (i = 0; i < arrSize-1; i++)
//	{
//		for (j = i + 1; j < arrSize; j++)
//		{
//			if (arr[i] > arr[j])
//			{
//				int tmp = arr[i];
//				arr[i] = arr[j];
//				arr[j] = tmp;
//			}
//		}
//	}
//	int* p1 = (int*)malloc(sizeof(int) * k);
//	for (i = 0; i < k; i++)
//	{
//		p1[i] = arr[i];
//	}
//	*return = k;
//	return p1;
//}